home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / mcomm / pushpop.c < prev    next >
Text File  |  1994-10-02  |  2KB  |  52 lines

  1.  
  2. /** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3. *                                                                           *
  4. *       P U S H  /  P O P   S C R E E N S   T O   N E A R   M E M O R Y     *
  5. *                Mike Dumdei, 6 Holly Lane, Texarkana TX  75503             *
  6. *                    Requires ASM modules PO_SCRN & PU_SCRN                 *
  7. *                                                                           *
  8. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/
  9. #if defined(__TURBOC__)
  10.   #include <alloc.h>
  11. #elif defined(__ZTC__)
  12.   #include <stdlib.h>
  13. #else
  14.   #include <malloc.h>
  15. #endif
  16.  
  17. int pu_scrnd(int, int, int, int, char *);
  18. int po_scrnd(char *);
  19.  
  20. static char *ScrnPtrAry[10];            /* max of 10 screens may be pushed */
  21. static char **ScrnPtr = ScrnPtrAry;
  22. static char CurntScrn = -1;
  23.  
  24. /*
  25.         p u s h s c r n
  26. */
  27. int pushscrn(int row, int col, int nrows, int ncols)
  28. {
  29.     if (CurntScrn == 9)
  30.         return (-1);                 /* can't push it if 10 already pushed */
  31.     if ((*ScrnPtr = malloc(2 * nrows * ncols + 16)) == (char *)0)
  32.         return (-2);                    /* can't push it if no memory left */
  33.     pu_scrnd(row, col, nrows, ncols, *ScrnPtr);
  34.     CurntScrn++, ScrnPtr++;
  35.     return (0);         /* push scrn, update variables, and return success */
  36. }
  37.  
  38. /*
  39.         p o p s c r n
  40. */
  41. int popscrn(void)
  42. {
  43.     if (CurntScrn < 0)
  44.         return (-1);                         /* can't pop it if not pushed */
  45.     --CurntScrn, --ScrnPtr;
  46.     po_scrnd(*ScrnPtr);
  47.     free(*ScrnPtr);
  48.     return (0);         /* adj vars, pop the screen, free the mem, & retrn */
  49. }
  50.  
  51.  
  52.